#include <iostream>

template<typename T>
void func_for_x(T x) {}	//推导 x

template<typename T>
void func_for_cx(const T x) {}	//推导 cx

template<typename T>
void func_for_rx(const T& x) {}	//推导 rx

template<typename T>
void f(T t) {}

template<typename T>
void f1(std::initializer_list<T> t) {}

auto func() {
	return 27;
}

//auto func1() {
//	return { 27 };
//}

int main() {
	auto x = 27;

	const auto cx = x;

	const auto& rx = x;

	func_for_x(27);

	func_for_cx(x);

	func_for_rx(rx);

	auto&& x1 = 27;		//auto -> int, ParamType -> int&&

	auto&& cx2 = cx;		//auto -> const int, ParamType -> const int&

	auto&& rx2 = x1;	//auto -> int, ParamType -> int&


	auto a1 = 27;

	auto a2(27);

	auto a3 = { 27 };

	auto a4{ 27 };


	//f({ 27 });

	f1({ 27 });


	auto lambda = [](auto param) {};

	//lambda({ 27 });

	return 0;
}